package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import modelo.Compra;
import modelo.Publicacion;
import modelo.Usuario;
import util.ConexionBD;
import excepcion.DAOExcepcion;

public class CompraDAO extends BaseDAO {

	public String insertar(Compra compra) throws DAOExcepcion {
		PublicacionDao pdao = new PublicacionDao();
		String mensaje = null;
		int stock = pdao.obtenerStockPublicacion(compra.getPublicacion().getIdPublicacion());
		if (stock < compra.getCantidad()) {
			mensaje = "El producto no cuenta con el stock solicitado";
		} else {
			String query = "insert into compras(cantidad,publicaciones_idpublicacion,usuarios_usuario) values (?,?,?)";
			Connection con = null;
			PreparedStatement stmt = null;
			ResultSet rs = null;
			try {
				con = ConexionBD.obtenerConexion();
				stmt = con.prepareStatement(query);
				stmt.setInt(1, compra.getCantidad());
				stmt.setInt(2, compra.getPublicacion().getIdPublicacion());
				stmt.setString(3, compra.getUsuario().getUser());
				System.out.println(stmt);
				int i = stmt.executeUpdate();
				if (i != 1) {
					mensaje = "No se pudo insertar";
					throw new SQLException(mensaje);
				}
				stock = stock-compra.getCantidad();
				pdao.procesarVenta(compra, stock);
				mensaje = "La compra se realizo satisfactoriamente";
			} catch (SQLException e) {
				System.err.println(e.getMessage());
				throw new DAOExcepcion(e.getMessage());
			} finally {
				this.cerrarResultSet(rs);
				this.cerrarStatement(stmt);
				this.cerrarConexion(con);
			}
		}
		return mensaje;
	}

	public Compra obtener(int idCompra) throws DAOExcepcion {
		Compra vo = new Compra();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			String query = "select * from compras where idcompra=?";
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, idCompra);
			rs = stmt.executeQuery();
			if (rs.next()) {
				vo.setIdCompra(rs.getInt("idcompra"));
				vo.setCantidad(rs.getInt("cantidad"));
				Publicacion publicacion = new Publicacion();
				publicacion.setIdPublicacion(rs.getInt("publicaciones_idpublicacion"));
				vo.setPublicacion(publicacion);
				Usuario usuario = new Usuario();
				usuario.setUser(rs.getString("usuarios_usuario"));
				vo.setUsuario(usuario);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}

}
